package cc.shacocloud.kotlin.tools.jdbc.impl

import cc.shacocloud.kotlin.tools.jdbc.ResultSetExtractor
import cc.shacocloud.kotlin.tools.jdbc.RowMapper
import java.sql.ResultSet

/**
 * 委派的 ResultSetExtractor 接口的适配器实现到一个 RowMapper，它只返回第一行的数据
 * @author 思追(shaco)
 */
class SingleRowMapperResultSetExtractor<T>(
    private val rowMapper: RowMapper<T>,
) : ResultSetExtractor<T> {

    override fun extractData(rs: ResultSet): T {
        if (rs.next()) {
            val mapRow = rowMapper.mapRow(rs, 0)

            if (rs.next()) {
                throw IllegalArgumentException("预期查询结果只返回1条数据，实际返回了多条数据！")
            }

            return mapRow
        }

        throw IllegalArgumentException("预期查询结果返回1条数据，实际返回0条数据！")
    }
}